/* 
 * File:   FileServiceProxy.h
 * Author: nahuel
 *
 * Created on May 24, 2013, 8:29 PM
 */

#ifndef FILESERVICEPROXY_H
#define	FILESERVICEPROXY_H


#include <string>
#include <stdint.h>
#include "client_SocketAsincronico.h"
#include "common_FileServiceConstants.h"

using namespace TP::Comunicacion;

namespace TP { namespace Servicios {

class FileServiceProxy {
    private:
        SocketAsincronico* _socket;
        string _usuario;
    public:
        
        FileServiceProxy(const string &pUsuario, SocketAsincronico* pSocket);
        
        // Declara un archivo nuevo
        void DeclareFile(const uint32_t &pToken, const std::string& fileName, const uint32_t &pVersion);

        // Elimina un archivo.
        void DeleteFile(const uint32_t &pToken, const std::string& fileName, const uint32_t &pVersion);
        
        // Obtiene del archivo pFileName alojado en el sevidor el chunk indicado.
        bool GetFileChunk (const uint32_t &pToken, const string &pFileName, const uint32_t &pChunkNumber);
        
        // Agrega al final del archivo fileName el bloque de bytes chunk
        bool PutFileChunk(const uint32_t &pToken, const std::string &fileName, const uint32_t &pChunkNumber, const string &pHash, const uint8_t* pChunk, const size_t pChunkSize);
        
        // Termina de definir el archivo
        bool DefineFile(const uint32_t &pToken, std::string& fileName);
        
        void GetRepositorio (const uint32_t &pToken);
        
        //FileServiceProxy(const FileServiceProxy& orig);
        virtual ~FileServiceProxy();

};

}}

#endif	/* FILESERVICEPROXY_H */

